#ifndef INTERACTION_H
#define INTERACTION_H

#include <QObject>
#include <QVector>

class Interaction : public QObject
{
    Q_OBJECT

    Q_PROPERTY(int currentScreenWidth READ getCurrentScreenWidth WRITE setCurrentScreenWidth NOTIFY currentScreenWidthChanged)
    Q_PROPERTY(int currentScreenHeight READ getCurrentScreenHeight WRITE setCurrentScreenHeight NOTIFY currentScreenHeightChanged)
    Q_PROPERTY(int practiceType READ getPracticeType WRITE setPracticeType NOTIFY practiceTypeChanged)
    Q_PROPERTY(int onceGerneratedQuantity READ getOnceGerneratedQuantity WRITE setOnceGerneratedQuantity NOTIFY onceGerneratedQuantityChanged)

public:
    explicit Interaction(QObject *parent = nullptr);

    Q_INVOKABLE int getRandomX();   // 获取一个随机的 x 值
    Q_INVOKABLE int getRandomY();   // 获取一个随机的 y 值
    Q_INVOKABLE QString getRandomValue();   // 获取一个随机的 任务内容
    Q_INVOKABLE QString getRandomImgUrl();  // 获取一个随机的imgUrl
    Q_INVOKABLE QString getRandomEndImgUrl();   // 获取一个在结束时期的随机Url

    int getCurrentScreenWidth() const;
    void setCurrentScreenWidth(int value);

    int getCurrentScreenHeight() const;
    void setCurrentScreenHeight(int value);

    int getPracticeType() const;
    void setPracticeType(int value);

    int getOnceGerneratedQuantity() const;
    void setOnceGerneratedQuantity(int value);



private:
    bool isValidRandom(const int& aRandomNum);   // 用于判断生成的随机数是否满足业务逻辑

signals:
    void currentScreenWidthChanged();
    void currentScreenHeightChanged();
    void practiceTypeChanged();
    void onceGerneratedQuantityChanged();
    void totalChanged();
    void pausePractise();   // 暂停练习信号
    void practiseCompleted();   // 练习完成信号

public slots:

private:
    int m_currentScreenWidth = 0;
    int m_currentScreenHeight = 0;
    int m_practiceType = 0;   // 练习的模式（0：简单，1：一般，2：困难）
    int m_onceGerneratedQuantity = 1;    // 表示任务球球一次生成的数量

    QVector<int> aAuxiliaryArr; // initJudgeContainerSize函数说的辅助容器


};

#endif // INTERACTION_H
